import { defineStore } from 'pinia'
// 引入封装的api
import categoryApi from '@/api/category'
// 引入定义的数据类型
import type {CategoryData} from '@/api/category'
// 引入 element-plus的 ElMessage
import { ElMessage } from 'element-plus'
// 引入 axios的AxiosError错误信息数据类型
import type { AxiosError } from 'axios'

// 定义state的函数返回值类型
interface CategoryStoreStateData {
  category1List:CategoryData[],
  category1Id:string | number
  category2List:CategoryData[],
  category2Id:string | number
  category3List:CategoryData[],
  category3Id:string | number
}

export const useCategoryStore = defineStore('category',{
  state():CategoryStoreStateData{
    return {
      // 一级分类数据列表
      category1List:[],
      // 一级分类数据列表的某个id
      category1Id:'',
      // 二级分类数据列表
      category2List:[],
      // 二级分类数据列表的某个id
      category2Id:'',
      // 三级分类数据列表
      category3List:[],
      // 三级分类数据列表的某个id
      category3Id:''
    }
  },

  actions:{
    // 获取一级分类的请求逻辑
    async getCategory1List(){
      try {
        // 发送api请求
        const res = await categoryApi.getCategory1()
        // 把获取到的一级分类数据存到state当中
        this.category1List = res
      } catch (error) {
        ElMessage.error('取一级分类列表失败' + (error as AxiosError).message)
      }
    },


    // 获取二级分类的请求逻辑
    async getCategory2List(){
      // 重新选中1级分类，需要清空23级分类id并且清空23级分类列表数据
      this.category2List=[]
      this.category2Id=''
      this.category3List=[]
      this.category3Id=''
      try {
        // 发送api请求
        const res = await categoryApi.getCategory2(this.category1Id as number)
        // 把获取到的一级分类数据存到state当中
        this.category2List = res
      } catch (error) {
        ElMessage.error('取二级分类列表失败' + (error as AxiosError).message)
      }
    },

    // 获取三级分类的请求逻辑
    async getCategory3List(){
      // 重新选中2级分类，需要清空3级分类id并且清空3级分类列表数据
      this.category3List=[]
      this.category3Id=''
      try {
        // 发送api请求
        const res = await categoryApi.getCategory3(this.category2Id as number)
        // 把获取到的一级分类数据存到state当中
        this.category3List = res
      } catch (error) {
        ElMessage.error('取三级分类列表失败' + (error as AxiosError).message)
      }
    }
  },

  getters:{

  }
})